package com.xiyue.leaspring.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class SplitMoneyUtil {
	
	private double money;//保存总金额，用于数据验证
	private int amount;//存放数量，数量控制循环的次数
	private int currentAmount;//当前次数
	private double surplusMoney;//剩余金额
	private double currentMoney;//当前处理后的金额
	
	
	//随机数字使用nextInt方法进行拆分，该方法支持int数据
	private Random rand = new Random();//准备随机数拆分
	private List<Double> allPackages = new ArrayList<Double>();//保存红包信息
	public SplitMoneyUtil(int amount,double money) {//设置红包数据
		this.amount = amount;//保存红包数量
		this.money = money - (amount/100.00);//预先处理金额
		this.currentAmount = amount;//当前处理金额
		this.surplusMoney = money * 100;//剩余资金等于总金额
		if(this.currentAmount==1) {//不拆分、做整体包
			this.allPackages.add(money);//一个大包
		}else{
			this.handle();//拆分处理
		}
	}
	
	private void handle() {//处理红包拆分
		int count = (int) (this.surplusMoney/this.amount);
		int key = count * 2;
		int rand = this.rand.nextInt(key);//通过已有的金额取出一个内容
		this.surplusMoney -= rand;//从原始资金中减少部分数据
		this.allPackages.add(rand/100.00);//保存到最终红包数据
		this.currentMoney+=rand;
		if(--this.currentAmount>1) {//还没有拆分到指定个数
			this.handle();//继续拆分
		}else {
			if(this.currentAmount==1) {//余额给最后一个红包
				this.allPackages.add(((this.money*100)-this.currentMoney)/100.00);
				return;
			}
		}
	}
	
	public List<Double> getAllPackage(){//得到全部红包数据
		List<Double> all = new ArrayList<Double>();
		Iterator<Double> it = this.allPackages.iterator();
		while(it.hasNext()) {
			double s  = it.next();
			all.add(MathUtils.round(s+0.01, 2));//四舍五入处理
		}
		return all;
	}
	
}
